package com.mongo.data.utils;

import java.util.Arrays;
import java.util.Objects;

/**
 * @date 2020/5/8 13:51
 */

public class EnumUtils {

    /**
     * 枚举值转换为String值，避免空指针异常
     *
     * @param e 枚举对象
     * @return String对象
     */
    public static <E extends Enum> String toString(E e) {
        if (Objects.isNull(e)) {
            return null;
        } else {
            return e.toString();
        }
    }

    /**
     * 解析字符串到枚举值 用这个工具的意义是，如果匹配失败会返回null，不会抛异常
     *
     * @param text  字符串
     * @param clazz 枚举类
     * @param <E>   枚举类泛型
     * @return 枚举对象
     */
    public static <E extends Enum> E parseEnum(String text, Class<E> clazz) {

        E[] enumConstants = clazz.getEnumConstants();
        if (Objects.isNull(enumConstants) || enumConstants.length == 0) {
            return null;
        }
        return Arrays.stream(enumConstants)
                .filter(member -> member.toString().equalsIgnoreCase(text))
                .findFirst()
                .orElse(null);
    }

    /**
     * 解析字符串到枚举值 用这个工具的意义是，如果匹配失败会返回null，不会抛异常
     *
     * @param text  字符串
     * @param clazz 枚举类
     * @return 枚举对象
     */
    public static Object parseEnumObject(String text, Class<?> clazz) {

        Object[] enumConstants = clazz.getEnumConstants();
        if (Objects.isNull(enumConstants) || enumConstants.length == 0) {
            return null;
        }
        return Arrays.stream(enumConstants)
                .filter(member -> member.toString().equalsIgnoreCase(text))
                .findFirst()
                .orElse(null);
    }

}
